Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

Windows内核调试

帖子发起人: dihin   发起时间: 2009-04-30 00:15 上午   回复: 5

Print Search
帖子排序:    
   2009-04-30, 00:15 上午
dihin 离线,最后访问时间: 2009/11/2 22:21:53 dihin

发帖数前500位
注册: 2009-04-29
发 贴: 3
Sleep [|-)] 很奇怪的蓝屏,希望张先生能帮忙一下
Reply Quote
我的win2000系统开机就蓝屏
错误吗是IRQL_NOT_LESS_OR_EQUAL (a)
CURRENT_IRQL: ff
!analyze -v的结果如下,麻烦张先生帮忙看看,最后一个堆栈打在nt!KiTrap0E+0x20b代表什么意思?

IRQL_NOT_LESS_OR_EQUAL (a)
An attempt was made to access a pageable (or completely invalid) address at an
interrupt request level (IRQL) that is too high. This is usually
caused by drivers using improper addresses.
If a kernel debugger is available get the stack backtrace.
Arguments:
Arg1: bcf4ffef, memory referenced
Arg2: 000000ff, IRQL
Arg3: 00000001, bitfield :
bit 0 : value 0 = read operation, 1 = write operation
bit 3 : value 0 = not an execute operation, 1 = execute operation (only on chips which support this level of status)
Arg4: 80466b4e, address which referenced memory

Debugging Details:
------------------

WRITE_ADDRESS: bcf4ffef Nonpaged pool

CURRENT_IRQL: ff

FAULTING_IP:
nt!KiTrap07+9a
80466b4e 0fae06 fxsave [esi]

DEFAULT_BUCKET_ID: DRIVER_FAULT

BUGCHECK_STR: 0xA

PROCESS_NAME: WinGUI.exe

TRAP_FRAME: bd00bcf0 -- (.trap 0xffffffffbd00bcf0)
ErrCode = 00000002
eax=86491600 ebx=80010031 ecx=bd00bdf0 edx=86aaada0 esi=bcf4fdf0 edi=032ee710
eip=80466b4e esp=bd00bd64 ebp=bd00bd64 iopl=0 nv up di pl nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010002
nt!KiTrap07+0x9a:
80466b4e 0fae06 fxsave [esi] ds:0023:bcf4fdf0=??
Resetting default scope

LAST_CONTROL_TRANSFER: from 80466b4e to 80467df7

STACK_TEXT:
bd00bcf0 80466b4e 00000000 00000000 00000000 nt!KiTrap0E+0x20b
bd00bd64 12014efa 00000000 00000000 85082ea8 nt!KiTrap07+0x9a
WARNING: Stack unwind information not available. Following frames may be wrong.
05cff638 1200cf1e 032ee754 10001c1e 032ee754 xerces_c_2_7+0x14efa
05cff6c4 10005c83 032ee710 1274e3d8 03235934 xerces_c_2_7+0xcf1e


STACK_COMMAND: kb

FOLLOWUP_IP:
nt!KiTrap07+9a
80466b4e 0fae06 fxsave [esi]

SYMBOL_STACK_INDEX: 1

SYMBOL_NAME: nt!KiTrap07+9a

FOLLOWUP_NAME: MachineOwner

MODULE_NAME: nt

IMAGE_NAME: ntoskrnl.exe

DEBUG_FLR_IMAGE_TIMESTAMP: 45069e6e

FAILURE_BUCKET_ID: 0xA_W_nt!KiTrap07+9a

BUCKET_ID: 0xA_W_nt!KiTrap07+9a

Followup: MachineOwner
IP 地址: 已记录   报告
   2009-05-03, 06:10 上午
dengxiaosally 离线,最后访问时间: 2016/1/20 5:52:45 吴卫星

发帖数前50位
注册: 2009-04-22
发 贴: 25
Re: 很奇怪的蓝屏,希望张先生能帮忙一下
Reply Quote
分析您的dump日志简单查看,这个由于硬件驱动等导致,建议到安全模式下测试
如果不行可以建议修复系统测试。谢谢
IP 地址: 已记录   报告
   2009-05-03, 11:48 上午
dihin 离线,最后访问时间: 2009/11/2 22:21:53 dihin

发帖数前500位
注册: 2009-04-29
发 贴: 3
Re: 很奇怪的蓝屏,希望张先生能帮忙一下
Reply Quote
谢谢楼上的回复
该蓝屏只要在wingui没起来的时候是不会蓝屏的(蓝屏信息里有PROCESS_NAME: WinGUI.exe )
奇怪的是,蓝屏堆栈信息都是应用层的
ring0的堆栈信息就是nt!KiTrap07+0x9a

kitrapXX是系统响应中断的函数?
IP 地址: 已记录   报告
   2009-05-03, 21:58 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 很奇怪的蓝屏,希望张先生能帮忙一下
Reply Quote

从栈回溯来看,(1)在WinGUI进程中,xerces模块内执行的浮点类指令触发了浮点异常(#NM);(2)在系统的浮点异常处理函数KiTrap07中,fxsave指令用来把浮点计算的上下文状态先保存起来;(3)保存的位置是当前线程的内核态栈,也就是目前esi所指向的内存,起始地址为bcf4fdf0;(4)在向以上地址保存数据时,触发了页错误异常(#PF);(5)负责处理页错误异常的KiTrap0E被执行,这是很复杂的一个异常处理函数,当这个函数认为当前是在高级别触发的一个页错误时,根据系统的规则,此情况下不可以执行虚拟内存交换机制,于是发起蓝屏(Bug Check),蓝屏的错误码就是IRQL_NOT_LESS_OR_EQUAL,意思是当前的IRQL没有小于或者等于(not less or equal)DISPATCH_LEVEL这个要求。

上面1、2两点属于正常的现象,第3点时已经有问题了,把用来保存浮点上下文的目标地址bcf4fdf0和当时的EBP寄存器做比较,二者相减:

lkd> ? bd00bd64-bcf4fdf0
Evaluate expression: 769908 = 000bbf74

加除以1024,换算成KB:

lkd> ? (bd00bd64-bcf4fdf0)/0n1024
Evaluate expression: 751 = 000002ef

哇,有700多KB,内核态栈默认是12KB,大内核态栈的大小记录在nt!MmLargeStackSize变量中,通常也就在几十KB。现在看来,上面计算出的目标地址显然“溢出了”,不在有效的栈空间上了,因此FXSAVE指令在使用这个内存时发生Page Fault异常了。

KiTrap07是从当前线程的InitialStack字段来读取栈顶的位置的,然后做减法来从栈上分配保存浮点状态的空间,大小为0x210字节。

lkd> dt _KTHREAD -y Ini
nt!_KTHREAD
   +0x018 InitialStack : Ptr32 Void
   +0x0df InitialNode : UChar

这样看了,可能是当前线程的KTHREAD结构被损坏了。

如果能够重现这个问题,那么建议使用双机内核调试,在崩溃时观察线程的KTHREAD结构。如果确认是这个结构被破坏,那么可以设置变量监视断点寻找破坏者的“黑手”。

 

 


IP 地址: 已记录   报告
   2009-05-04, 21:59 下午
dihin 离线,最后访问时间: 2009/11/2 22:21:53 dihin

发帖数前500位
注册: 2009-04-29
发 贴: 3
Re: 很奇怪的蓝屏,希望张先生能帮忙一下
Reply Quote
十分感谢!
IP 地址: 已记录   报告
   2009-05-10, 19:46 下午
pch 离线,最后访问时间: 2009/12/1 15:36:26 pch

发帖数前25位
注册: 2008-08-26
发 贴: 28
Re: 很奇怪的蓝屏,希望张先生能帮忙一下
Reply Quote
分析的很好!
IP 地址: 已记录   报告
高端调试 » 软件调试 » Windows内核调试 » 很奇怪的蓝屏,希望张先生能帮忙一下

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.